﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Gra.Seguros.Servicio.Be;

namespace Gra.Seguros.Servicio.Dalc
{
    public class CotizacionDalc : IDisposable
    {
        #region "Procedimientos Consultas"
            public List<CotizacionBe> listar(int _cCotizacion, string _fCreacionInicio, string _fCreacionFin, int _cCliente, int _cTipoSeguro, int _cRamo, int _cEjecutivo, int _cEstadoCot)
            {
                try
                {
                    List<CotizacionBe> lst = new List<CotizacionBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarCabeceraCotizacion", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cCotizacion", SqlDbType.Int).Value = _cCotizacion;
                        oCommand.Parameters.Add("@fCreacionInicio", SqlDbType.VarChar, 8).Value = _fCreacionInicio;
                        oCommand.Parameters.Add("@fCreacionFin", SqlDbType.VarChar, 8).Value = _fCreacionFin;
                        oCommand.Parameters.Add("@cCliente", SqlDbType.Int).Value = _cCliente;
                        oCommand.Parameters.Add("@cTipoSeguro", SqlDbType.Int).Value = _cTipoSeguro;
                        oCommand.Parameters.Add("@cRamo", SqlDbType.Int).Value = _cRamo;
                        oCommand.Parameters.Add("@cEjecutivo", SqlDbType.Int).Value = _cEjecutivo;
                        oCommand.Parameters.Add("@cEstadoCot", SqlDbType.SmallInt).Value = _cEstadoCot;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    CotizacionBe obj = new CotizacionBe();
                                    obj.cCotizacion = drListado.GetInt32(drListado.GetOrdinal("cCotizacion"));
                                    obj.fCreacion = drListado.GetString(drListado.GetOrdinal("fCreacion"));
                                    obj.Cliente = new ClienteBe();
                                    obj.Cliente.cCliente = drListado.GetInt32(drListado.GetOrdinal("cCliente"));
                                    obj.Cliente.dNomCliente = drListado.GetString(drListado.GetOrdinal("dNomCliente"));
                                    obj.Cliente.dApeRazonCliente = drListado.GetString(drListado.GetOrdinal("dApeRazonCliente"));
                                    obj.Ejecutivo = new EjecutivoBe();
                                    obj.Ejecutivo.cEjecutivo = drListado.GetInt32(drListado.GetOrdinal("cEjecutivo"));
                                    obj.Ejecutivo.dNombre = drListado.GetString(drListado.GetOrdinal("dNombre"));
                                    obj.Ejecutivo.dApellido = drListado.GetString(drListado.GetOrdinal("dApellido"));
                                    obj.Ramo = new RamoBe();
                                    obj.Ramo.cRamo = drListado.GetInt32(drListado.GetOrdinal("cRamo"));
                                    obj.Ramo.dRamo = drListado.GetString(drListado.GetOrdinal("dRamo"));
                                    obj.EstadoCotizacion = new EstadoCotizacionBe();
                                    obj.EstadoCotizacion.cEstadoCot = drListado.GetInt16(drListado.GetOrdinal("cEstadoCot"));
                                    obj.EstadoCotizacion.dEstadoCot = drListado.GetString(drListado.GetOrdinal("dEstadoCot"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }


            public List<CotizacionBe> listarxClientePendientes(int _cCliente, int _cEstadoCot)
            {
                try
                {
                    List<CotizacionBe> lst = new List<CotizacionBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarCabeceraCotizacionxCliente", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cCliente", SqlDbType.Int).Value = _cCliente;
                        oCommand.Parameters.Add("@cEstadoCot", SqlDbType.SmallInt).Value = _cEstadoCot;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    CotizacionBe obj = new CotizacionBe();
                                    obj.cCotizacion = drListado.GetInt32(drListado.GetOrdinal("cCotizacion"));
                                    obj.fCreacion = drListado.GetString(drListado.GetOrdinal("fCreacion"));
                                    obj.Ramo = new RamoBe();
                                    obj.Ramo.cRamo = drListado.GetInt32(drListado.GetOrdinal("cRamo"));
                                    obj.Ramo.dRamo = drListado.GetString(drListado.GetOrdinal("dRamo"));
                                    obj.Ramo.oTipoSeguro = new TipoSeguroBe();
                                    obj.Ramo.oTipoSeguro.cTipoSeguro = drListado.GetInt32(drListado.GetOrdinal("cTipoSeguro"));
                                    obj.Ramo.oTipoSeguro.dTipoSeguro = drListado.GetString(drListado.GetOrdinal("dTipoSeguro"));
                                    obj.Ejecutivo = new EjecutivoBe();
                                    obj.Ejecutivo.cEjecutivo = drListado.GetInt32(drListado.GetOrdinal("cEjecutivo"));
                                    obj.Ejecutivo.dNombre = drListado.GetString(drListado.GetOrdinal("dNombre"));
                                    obj.Ejecutivo.dApellido = drListado.GetString(drListado.GetOrdinal("dApellido"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }


            public List<CotizacionBe> listarxClientexRamosPendientes(string _cTipoDocumento,string _nNroDocumento, int _cRamo)
            {
                try
                {
                    List<CotizacionBe> lst = new List<CotizacionBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarCabeceraCotizacionxClientexRamo", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cTipoDocumento", SqlDbType.VarChar,4).Value = _cTipoDocumento;
                        oCommand.Parameters.Add("@nNroDocumento", SqlDbType.VarChar,15).Value = _nNroDocumento;
                        oCommand.Parameters.Add("@cRamo", SqlDbType.SmallInt).Value = _cRamo;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    CotizacionBe obj = new CotizacionBe();
                                    obj.cCotizacion = drListado.GetInt32(drListado.GetOrdinal("cCotizacion"));
                                    obj.dCotizacion = drListado.GetString(drListado.GetOrdinal("dCotizacion"));
                                    obj.fCreacion = drListado.GetString(drListado.GetOrdinal("fCreacion"));
                                    obj.Cliente = new ClienteBe();
                                    obj.Cliente.cCliente = drListado.GetInt32(drListado.GetOrdinal("cCliente"));                                    
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

        #endregion

        #region "Procedimientos Mantenimientos"
            public string anular(string _str_Cotizacion)
            {
                try
                {
                    string mensaje = "";
                    using (SqlCommand oCommand = new SqlCommand("uspAnularCotizacion", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@str_Cotizacion", SqlDbType.Xml).Value = _str_Cotizacion;
                        oCommand.ExecuteNonQuery();
                    }

                    mensaje = "OK";
                    return mensaje;
                }
                catch (Exception ex) { throw ex; }
            }
        #endregion

        #region "Constructor & Disposable"
            private bool _disposed = false;
            SqlConnection oCn = null;
            public CotizacionDalc()
            {
                string strConnection = ConfigurationManager.ConnectionStrings["dbSeguros"].ConnectionString;
                oCn = new SqlConnection(strConnection);
                oCn.Open();
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (!_disposed)
                {
                    if (disposing)
                    {
                        //Dispose managed resources here. llamar componetes de conexion u otros.                        
                        if (oCn.State != ConnectionState.Closed)
                        {
                            oCn.Close();
                        }
                        oCn.Dispose();
                    }
                    //Disposed unmanaged resources here.
                    //set the _disposed flag to prevent subsequent disposals.
                    _disposed = true;
                }
            }
            //Finalization code.
            ~CotizacionDalc()
            {
                Dispose(false);
            }
        #endregion
    }
}
